package com.xp.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;

/**
 * 节点定义实体类
 * 用于存储动态节点的配置信息，包括节点的入参、出参等元数据
 *
 * @author xp
 * @since 2024-01-01
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("node_definition")
public class NodeDefinition {

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 节点编码
     */
    @TableField("node_code")
    private String nodeCode;

    /**
     * 节点名称
     */
    @TableField("node_name")
    private String nodeName;

    /**
     * 节点描述
     */
    @TableField("node_desc")
    private String nodeDesc;

    /**
     * 节点类型：START-开始节点，END-结束节点，COMMON-普通节点，CONDITION-条件节点，SWITCH-分支节点，FOR-循环节点，WHILE-循环节点，BREAK-中断节点，SUB_FLOW-子流程节点
     */
    @TableField("node_type")
    private String nodeType;

    /**
     * 节点分类：BASIC-基础节点，HTTP-HTTP请求，DATABASE-数据库操作，FILE-文件操作，EMAIL-邮件发送，SCRIPT-脚本执行，TRANSFORM-数据转换，TIMER-定时器，PARALLEL-并行处理，LOOP-循环处理，CONDITION-条件判断
     */
    @TableField("category")
    private String category;

    /**
     * 节点图标
     */
    @TableField("icon")
    private String icon;

    /**
     * 节点颜色
     */
    @TableField("color")
    private String color;

    /**
     * 组件类名（LiteFlow组件类）
     */
    @TableField("component_class")
    private String componentClass;

    /**
     * 输入参数Schema（JSON Schema格式）
     */
    @TableField("input_schema")
    private String inputSchema;

    /**
     * 输出参数Schema（JSON Schema格式）
     */
    @TableField("output_schema")
    private String outputSchema;

    /**
     * 配置参数Schema（JSON Schema格式）
     */
    @TableField("config_schema")
    private String configSchema;

    /**
     * 默认配置（JSON格式）
     */
    @TableField("default_config")
    private String defaultConfig;

    /**
     * 脚本模板（用于脚本类型节点）
     */
    @TableField("script_template")
    private String scriptTemplate;

    /**
     * 版本号
     */
    @TableField("version")
    private String version;

    /**
     * 状态：0-禁用，1-启用，2-废弃
     */
    @TableField("status")
    private Integer status;

    /**
     * 是否系统内置：0-否，1-是
     */
    @TableField("is_system")
    private Integer isSystem;

    /**
     * 排序顺序
     */
    @TableField("sort_order")
    private Integer sortOrder;

    /**
     * 创建人ID
     */
    @TableField("creator_id")
    private Long creatorId;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 是否删除：0-否，1-是
     */
    @TableField("deleted")
    @TableLogic
    private Integer deleted;
}